Skip to content

Add better handling for native dropdowns #140

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

Zach10za
Copy link
Contributor

@Zach10za Zach10za commented Jul 8, 2025

This PR adds better handling for native dropdowns. This feature was recently introduced in the JS repo: browserbase/stagehand#842 so this change is a simple port to python.

This should resolve this issue: #135

Why

Currently native os-level dropdowns are not able to be acted on. My understanding is these UI elements are rendered by the OS and are not part of the DOM which makes them invisible to playwright.

What changed

A straight port of the JS PR: browserbase/stagehand#842

TL;DR: Add a new method selectOptionFromDropdown and instructions in the prompt for how to use it. The method uses Playwright's select_option locator method.

Test plan

I ported over the test cases from the JS PR:

  1. Function is used properly on native dropdowns (LOCAL + BROWSERBASE)
  2. Function is skipped properly on hidden and custom dropdowns (LOCAL)

@seanmcguire12
Copy link
Member

thanks for doing this! could you add the role replacement functionality that was implemented in the typescript repo? here is the relevant file in the PR

if node_role == "combobox":
node_role = "select"
node['role'] = node_role

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can't replace any combobox with select, in TS we do so conditionally with other heuristics. Checking if this replacement of roles is critical, if it is it's going to require a bigger pr separate to this to catch up with the new formatting of encoded ids in TS @Zach10za

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gonna push a patch and run evals

@miguelg719 miguelg719 changed the base branch from main to contrib/#140 July 14, 2025 22:42
@miguelg719 miguelg719 merged commit fc0cb89 into browserbase:contrib/#140 Jul 14, 2025
miguelg719 added a commit that referenced this pull request Jul 14, 2025
* Add better handling for native dropdowns (#140)

* Add better handling for native dropdowns

* Update comment

* Add role replacement

* patch and changeset

* clean up

---------

Co-authored-by: Zach Loza <Zach10za@users.noreply.github.com>
@github-actions github-actions bot mentioned this pull request Jul 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants